import axios from "axios";
import { message } from "ant-design-vue"

const http = {};
const service = axios.create({
  baseURL: process.env.BASE_URL,
  timeout: 20 * 1000,
  transformRequest: function(data) {
    return JSON.stringify(data);
  },
  validateStatus: function(status) {
    return status >= 200 && status < 300;
  }
});

service.interceptors.request.use(
  function(config) {
    config.headers = {
      "Content-type": "application/json"
    };
    return config;
  },
  function(error) {
    return Promise.reject(error);
  }
);

service.interceptors.response.use(
  function(response) {
    // console.log('sss', response);
    return Promise.resolve(response.data);
  },
  function(error) {
    if (error && error.response) {
      switch (error.response.status) {
        case 400:
          error.message = "错误请求";
          break;
        case 401:
          error.message = "未授权，请重新登录";
          break;
        case 403:
          error.message = "拒绝访问";
          break;
        case 404:
          error.message = "请求错误,未找到该资源";
          // window.location.href = "/NotFound";
          break;
        case 405:
          error.message = "请求方法未允许";
          break;
        case 406:
          error.message = error.response.data.message;
          break;
        case 408:
          error.message = "请求超时";
          break;
        case 500:
          error.message = "服务器端出错";
          break;
        case 501:
          error.message = "网络未实现";
          break;
        case 502:
          error.message = "网络错误";
          break;
        case 503:
          error.message = "服务不可用";
          break;
        case 504:
          error.message = "网络超时";
          break;
        case 505:
          error.message = "http版本不支持该请求";
          break;
        default:
          error.message = `连接错误${error.response.status}`;
      }
    } else {
      if (JSON.stringify(error).includes("timeout")) {
        message.error("服务器响应超时，请刷新当前页");
      }
      error.message("连接服务器失败");
    }

    message.error(error.message);

    return Promise.reject(error.response);
  }
);

http.get = function(config) {
  config.method = "get";
  return service(config);
};

http.post = function(config) {
  config.method = "post";
  return service(config);
};

http.put = function(config) {
  config.method = "put";
  return service(config);
};

http.delete = function(config) {
  config.method = "delete";
  return service(config);
};

http.request = function(config) {
  return axios(config);
};

export default http;
